package StructurePattern.Bridge;

/**
 * @author: Themberfue
 * @date: 2025/8/12 11:03
 * @description:
 */
// 1. 实现化接口（颜色）
interface Color {
    String getColor();
}

// 2. 具体实现化（具体颜色）
class Red implements Color {
    @Override
    public String getColor() {
        return "红色";
    }
}

class Blue implements Color {
    @Override
    public String getColor() {
        return "蓝色";
    }
}

class Green implements Color {
    @Override
    public String getColor() {
        return "绿色";
    }
}

// 3. 抽象化（形状）
abstract class Shape {
    // 持有颜色的引用（桥接）
    protected Color color;

    // 通过构造函数注入颜色
    public Shape(Color color) {
        this.color = color;
    }

    // 抽象方法：绘制形状
    public abstract void draw();
}

// 4. 扩展抽象化（具体形状）
class Circle extends Shape {
    public Circle(Color color) {
        super(color);
    }

    @Override
    public void draw() {
        System.out.println("绘制" + color.getColor() + "的圆形");
    }
}

class Square extends Shape {
    public Square(Color color) {
        super(color);
    }

    @Override
    public void draw() {
        System.out.println("绘制" + color.getColor() + "的正方形");
    }
}

class Triangle extends Shape {
    public Triangle(Color color) {
        super(color);
    }

    @Override
    public void draw() {
        System.out.println("绘制" + color.getColor() + "的三角形");
    }
}

// 5. 客户端代码
public class BridgeExample {
    public static void main(String[] args) {
        // 创建颜色对象
        Color red = new Red();
        Color blue = new Blue();
        Color green = new Green();

        // 创建不同颜色的形状（通过桥接关联）
        Shape redCircle = new Circle(red);
        Shape blueSquare = new Square(blue);
        Shape greenTriangle = new Triangle(green);
        Shape redSquare = new Square(red);

        // 绘制形状
        redCircle.draw();
        blueSquare.draw();
        greenTriangle.draw();
        redSquare.draw();
    }
}

